Code coverage report for src/index.js

Statements: 20.3% (27 / 133)      Branches: 5% (1 / 20)      Functions: 15.69% (8 / 51)      Lines: 20.3% (27 / 133)      Ignored: none     

All files » src/ » index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 2471     1   1   1                               1                     1 1 1 1           1               1                       1                                                                                             1                                                                                                                     1       1                                                                 1 1                                         1   1   4774423 4774423   2     1 1 1 1 1        
System.register(['core-js', 'aurelia-framework', 'aurelia-logging-console'], function (_export) {
  'use strict';
 
  var core, Aurelia, LogManager, ConsoleAppender, logger, readyQueue, isReady, installedDevelopmentLogging;
 
  _export('bootstrap', bootstrap);
 
  function onReady(callback) {
    return new Promise(function (resolve, reject) {
      if (!isReady) {
        readyQueue.push(function () {
          try {
            resolve(callback());
          } catch (e) {
            reject(e);
          }
        });
      } else {
        resolve(callback());
      }
    });
  }
 
  function bootstrap(configure) {
    return onReady(function () {
      var loader = new window.AureliaLoader(),
          aurelia = new Aurelia(loader);
 
      return configureAurelia(aurelia).then(function () {
        return configure(aurelia);
      });
    });
  }
 
  function ready(global) {
    return new Promise(function (resolve, reject) {
      Eif (global.document.readyState === 'complete') {
        resolve(global.document);
      } else {
        global.document.addEventListener('DOMContentLoaded', completed, false);
        global.addEventListener('load', completed, false);
      }
 
      function completed() {
        global.document.removeEventListener('DOMContentLoaded', completed, false);
        global.removeEventListener('load', completed, false);
        resolve(global.document);
      }
    });
  }
 
  function ensureLoader() {
    if (!window.AureliaLoader) {
      return System.normalize('aurelia-bootstrapper').then(function (bootstrapperName) {
        return System.normalize('aurelia-loader-default', bootstrapperName).then(function (loaderName) {
          return System['import'](loaderName);
        });
      });
    }
 
    return Promise.resolve();
  }
 
  function preparePlatform() {
    return System.normalize('aurelia-bootstrapper').then(function (bootstrapperName) {
      return System.normalize('aurelia-framework', bootstrapperName).then(function (frameworkName) {
        System.map['aurelia-framework'] = frameworkName;
 
        return System.normalize('aurelia-loader', frameworkName).then(function (loaderName) {
          var toLoad = [];
 
          if (!System.polyfilled) {
            logger.debug('loading core-js');
            toLoad.push(System.normalize('core-js', loaderName).then(function (name) {
              return System['import'](name);
            }));
          }
 
          toLoad.push(System.normalize('aurelia-dependency-injection', frameworkName).then(function (name) {
            System.map['aurelia-dependency-injection'] = name;
          }));
 
          toLoad.push(System.normalize('aurelia-router', bootstrapperName).then(function (name) {
            System.map['aurelia-router'] = name;
          }));
 
          toLoad.push(System.normalize('aurelia-logging-console', bootstrapperName).then(function (name) {
            System.map['aurelia-logging-console'] = name;
          }));
 
          if (!('import' in document.createElement('link'))) {
            logger.debug('loading the HTMLImports polyfill');
            toLoad.push(System.normalize('webcomponentsjs/HTMLImports.min', loaderName).then(function (name) {
              return System['import'](name);
            }));
          }
 
          if (!('content' in document.createElement('template'))) {
            logger.debug('loading the HTMLTemplateElement polyfill');
            toLoad.push(System.normalize('aurelia-html-template-element', loaderName).then(function (name) {
              return System['import'](name);
            }));
          }
 
          return Promise.all(toLoad);
        });
      });
    });
  }
 
  function configureAurelia(aurelia) {
    return System.normalize('aurelia-bootstrapper').then(function (bName) {
      var toLoad = [];
 
      toLoad.push(System.normalize('aurelia-templating-binding', bName).then(function (templatingBinding) {
        aurelia.use.defaultBindingLanguage = function () {
          aurelia.use.plugin(templatingBinding);
          return this;
        };
      }));
 
      toLoad.push(System.normalize('aurelia-templating-router', bName).then(function (templatingRouter) {
        aurelia.use.router = function () {
          aurelia.use.plugin(templatingRouter);
          return this;
        };
      }));
 
      toLoad.push(System.normalize('aurelia-history-browser', bName).then(function (historyBrowser) {
        aurelia.use.history = function () {
          aurelia.use.plugin(historyBrowser);
          return this;
        };
      }));
 
      toLoad.push(System.normalize('aurelia-templating-resources', bName).then(function (name) {
        System.map['aurelia-templating-resources'] = name;
        aurelia.use.defaultResources = function () {
          aurelia.use.plugin(name);
          return this;
        };
      }));
 
      toLoad.push(System.normalize('aurelia-event-aggregator', bName).then(function (eventAggregator) {
        System.map['aurelia-event-aggregator'] = eventAggregator;
        aurelia.use.eventAggregator = function () {
          aurelia.use.plugin(eventAggregator);
          return this;
        };
      }));
 
      aurelia.use.standardConfiguration = function () {
        aurelia.use.defaultBindingLanguage().defaultResources().history().router().eventAggregator();
        return this;
      };
 
      aurelia.use.developmentLogging = function () {
        if (!installedDevelopmentLogging) {
          installedDevelopmentLogging = true;
          LogManager.addAppender(new ConsoleAppender());
          LogManager.setLevel(LogManager.logLevel.debug);
        }
        return this;
      };
 
      return Promise.all(toLoad);
    });
  }
 
  function runningLocally() {
    return window.location.protocol !== 'http' && window.location.protocol !== 'https';
  }
 
  function handleApp(appHost) {
    var configModuleId = appHost.getAttribute('aurelia-app'),
        aurelia,
        loader;
 
    if (configModuleId) {
      loader = new window.AureliaLoader();
 
      return loader.loadModule(configModuleId).then(function (m) {
        aurelia = new Aurelia(loader);
        aurelia.host = appHost;
        return configureAurelia(aurelia).then(function () {
          return m.configure(aurelia);
        });
      });
    } else {
      aurelia = new Aurelia();
      aurelia.host = appHost;
 
      return configureAurelia(aurelia).then(function () {
        if (runningLocally()) {
          aurelia.use.developmentLogging();
        }
 
        aurelia.use.standardConfiguration();
 
        return aurelia.start().then(function (a) {
          return a.setRoot();
        });
      });
    }
  }
 
  function run() {
    return ready(window).then(function (doc) {
      var appHost = doc.querySelectorAll('[aurelia-app]');
 
      return ensureLoader().then(function () {
        return preparePlatform().then(function () {
          var i, ii;
 
          for (i = 0, ii = appHost.length; i < ii; ++i) {
            handleApp(appHost[i]);
          }
 
          isReady = true;
          for (i = 0, ii = readyQueue.length; i < ii; ++i) {
            readyQueue[i]();
          }
          readyQueue = [];
        });
      });
    });
  }
 
  return {
    setters: [function (_coreJs) {
      core = _coreJs['default'];
    }, function (_aureliaFramework) {
      Aurelia = _aureliaFramework.Aurelia;
      LogManager = _aureliaFramework.LogManager;
    }, function (_aureliaLoggingConsole) {
      ConsoleAppender = _aureliaLoggingConsole.ConsoleAppender;
    }],
    execute: function () {
      logger = LogManager.getLogger('bootstrapper');
      readyQueue = [];
      isReady = false;
      installedDevelopmentLogging = false;
      run();
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2Jvb3RzdHJhcHBlci9zcmMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O2tEQUlJLE1BQU0sRUFFTixVQUFVLEVBQ1YsT0FBTyxFQXVHUCwyQkFBMkI7O3VCQXJGZixTQUFTOztBQWhCekIsV0FBUyxPQUFPLENBQUMsUUFBUSxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFLO0FBQ3RDLFVBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixrQkFBVSxDQUFDLElBQUksQ0FBQyxZQUFNO0FBQ3BCLGNBQUk7QUFDRixtQkFBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7V0FDckIsQ0FBQyxPQUFNLENBQUMsRUFBRTtBQUNULGtCQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDWDtTQUNGLENBQUMsQ0FBQztPQUNKLE1BQU07QUFDTCxlQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztPQUNyQjtLQUNGLENBQUMsQ0FBQztHQUNKOztBQUVNLFdBQVMsU0FBUyxDQUFDLFNBQVMsRUFBRTtBQUNuQyxXQUFPLE9BQU8sQ0FBQyxZQUFNO0FBQ25CLFVBQUksTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRTtVQUNuQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRWxDLGFBQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQU07QUFBRSxlQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztPQUFFLENBQUMsQ0FBQztLQUM3RSxDQUFDLENBQUM7R0FDSjs7QUFFRCxXQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDckIsV0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUk7QUFD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LEdBQUcsS0FBSztBQXlIdkMsU0FBRyxFQUFFLENBQUMiLCJmaWxlIjoiL1VzZXJzL0Vpc2VuYmVyZ0VmZmVjdC9Eb2N1bWVudHMvR2l0SHViL1RoZSBEdXJhbmRhbCBQcm9qZWN0L2F1cmVsaWEvYm9vdHN0cmFwcGVyL3NyYy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb3JlIGZyb20gJ2NvcmUtanMnO1xuaW1wb3J0IHtBdXJlbGlhLCBMb2dNYW5hZ2VyfSBmcm9tICdhdXJlbGlhLWZyYW1ld29yayc7XG5pbXBvcnQge0NvbnNvbGVBcHBlbmRlcn0gZnJvbSAnYXVyZWxpYS1sb2dnaW5nLWNvbnNvbGUnO1xuXG52YXIgbG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2Jvb3RzdHJhcHBlcicpO1xuXG52YXIgcmVhZHlRdWV1ZSA9IFtdO1xudmFyIGlzUmVhZHkgPSBmYWxzZTtcblxuZnVuY3Rpb24gb25SZWFkeShjYWxsYmFjaykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgcmVhZHlRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNvbHZlKGNhbGxiYWNrKCkpO1xuICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlKGNhbGxiYWNrKCkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXAoY29uZmlndXJlKSB7XG4gIHJldHVybiBvblJlYWR5KCgpID0+IHtcbiAgICB2YXIgbG9hZGVyID0gbmV3IHdpbmRvdy5BdXJlbGlhTG9hZGVyKCksXG4gICAgICAgIGF1cmVsaWEgPSBuZXcgQXVyZWxpYShsb2FkZXIpO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyZUF1cmVsaWEoYXVyZWxpYSkudGhlbigoKSA9PiB7IHJldHVybiBjb25maWd1cmUoYXVyZWxpYSk7IH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZHkoZ2xvYmFsKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PntcbiAgICBpZiAoZ2xvYmFsLmRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiApIHtcbiAgICAgIHJlc29sdmUoZ2xvYmFsLmRvY3VtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2xvYmFsLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCwgZmFsc2UpO1xuICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGNvbXBsZXRlZCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcbiAgICAgIGdsb2JhbC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQsIGZhbHNlKTtcbiAgICAgIGdsb2JhbC5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLCBjb21wbGV0ZWQsIGZhbHNlKTtcbiAgICAgIHJlc29sdmUoZ2xvYmFsLmRvY3VtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVMb2FkZXIoKXtcbiAgaWYoIXdpbmRvdy5BdXJlbGlhTG9hZGVyKXtcbiAgICByZXR1cm4gU3lzdGVtLm5vcm1hbGl6ZSgnYXVyZWxpYS1ib290c3RyYXBwZXInKS50aGVuKGZ1bmN0aW9uKGJvb3RzdHJhcHBlck5hbWUpe1xuICAgICAgcmV0dXJuIFN5c3RlbS5ub3JtYWxpemUoJ2F1cmVsaWEtbG9hZGVyLWRlZmF1bHQnLCBib290c3RyYXBwZXJOYW1lKS50aGVuKGZ1bmN0aW9uKGxvYWRlck5hbWUpe1xuICAgICAgICByZXR1cm4gU3lzdGVtLmltcG9ydChsb2FkZXJOYW1lKTtcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVQbGF0Zm9ybSgpe1xuICByZXR1cm4gU3lzdGVtLm5vcm1hbGl6ZSgnYXVyZWxpYS1ib290c3RyYXBwZXInKS50aGVuKGZ1bmN0aW9uKGJvb3RzdHJhcHBlck5hbWUpe1xuICAgIHJldHVybiBTeXN0ZW0ubm9ybWFsaXplKCdhdXJlbGlhLWZyYW1ld29yaycsIGJvb3RzdHJhcHBlck5hbWUpLnRoZW4oZnVuY3Rpb24oZnJhbWV3b3JrTmFtZSl7XG4gICAgICBTeXN0ZW0ubWFwWydhdXJlbGlhLWZyYW1ld29yayddID0gZnJhbWV3b3JrTmFtZTtcblxuICAgICAgcmV0dXJuIFN5c3RlbS5ub3JtYWxpemUoJ2F1cmVsaWEtbG9hZGVyJywgZnJhbWV3b3JrTmFtZSkudGhlbihmdW5jdGlvbihsb2FkZXJOYW1lKXtcbiAgICAgICAgdmFyIHRvTG9hZCA9IFtdO1xuXG4gICAgICAgIGlmKCFTeXN0ZW0ucG9seWZpbGxlZCl7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdsb2FkaW5nIGNvcmUtanMnKTtcbiAgICAgICAgICB0b0xvYWQucHVzaChTeXN0ZW0ubm9ybWFsaXplKCdjb3JlLWpzJywgbG9hZGVyTmFtZSkudGhlbihmdW5jdGlvbihuYW1lKXtcbiAgICAgICAgICAgIHJldHVybiBTeXN0ZW0uaW1wb3J0KG5hbWUpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvTG9hZC5wdXNoKFN5c3RlbS5ub3JtYWxpemUoJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nLCBmcmFtZXdvcmtOYW1lKS50aGVuKGZ1bmN0aW9uKG5hbWUpe1xuICAgICAgICAgIFN5c3RlbS5tYXBbJ2F1cmVsaWEtZGVwZW5kZW5jeS1pbmplY3Rpb24nXSA9IG5hbWU7XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0b0xvYWQucHVzaChTeXN0ZW0ubm9ybWFsaXplKCdhdXJlbGlhLXJvdXRlcicsIGJvb3RzdHJhcHBlck5hbWUpLnRoZW4oZnVuY3Rpb24obmFtZSl7XG4gICAgICAgICAgU3lzdGVtLm1hcFsnYXVyZWxpYS1yb3V0ZXInXSA9IG5hbWU7XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0b0xvYWQucHVzaChTeXN0ZW0ubm9ybWFsaXplKCdhdXJlbGlhLWxvZ2dpbmctY29uc29sZScsIGJvb3RzdHJhcHBlck5hbWUpLnRoZW4oZnVuY3Rpb24obmFtZSl7XG4gICAgICAgICAgU3lzdGVtLm1hcFsnYXVyZWxpYS1sb2dnaW5nLWNvbnNvbGUnXSA9IG5hbWU7XG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZighKCdpbXBvcnQnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKSkpe1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnbG9hZGluZyB0aGUgSFRNTEltcG9ydHMgcG9seWZpbGwnKTtcbiAgICAgICAgICB0b0xvYWQucHVzaChTeXN0ZW0ubm9ybWFsaXplKCd3ZWJjb21wb25lbnRzanMvSFRNTEltcG9ydHMubWluJywgbG9hZGVyTmFtZSkudGhlbihmdW5jdGlvbihuYW1lKXtcbiAgICAgICAgICAgIHJldHVybiBTeXN0ZW0uaW1wb3J0KG5hbWUpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCEoXCJjb250ZW50XCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpKSl7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdsb2FkaW5nIHRoZSBIVE1MVGVtcGxhdGVFbGVtZW50IHBvbHlmaWxsJyk7XG4gICAgICAgICAgdG9Mb2FkLnB1c2goU3lzdGVtLm5vcm1hbGl6ZSgnYXVyZWxpYS1odG1sLXRlbXBsYXRlLWVsZW1lbnQnLCBsb2FkZXJOYW1lKS50aGVuKGZ1bmN0aW9uKG5hbWUpe1xuICAgICAgICAgICAgcmV0dXJuIFN5c3RlbS5pbXBvcnQobmFtZSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRvTG9hZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbnZhciBpbnN0YWxsZWREZXZlbG9wbWVudExvZ2dpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gY29uZmlndXJlQXVyZWxpYShhdXJlbGlhKXtcbiAgcmV0dXJuIFN5c3RlbS5ub3JtYWxpemUoJ2F1cmVsaWEtYm9vdHN0cmFwcGVyJykudGhlbihmdW5jdGlvbihiTmFtZSl7XG4gICAgdmFyIHRvTG9hZCA9IFtdO1xuXG4gICAgdG9Mb2FkLnB1c2goU3lzdGVtLm5vcm1hbGl6ZSgnYXVyZWxpYS10ZW1wbGF0aW5nLWJpbmRpbmcnLCBiTmFtZSkudGhlbih0ZW1wbGF0aW5nQmluZGluZyA9PiB7XG4gICAgICBhdXJlbGlhLnVzZS5kZWZhdWx0QmluZGluZ0xhbmd1YWdlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgYXVyZWxpYS51c2UucGx1Z2luKHRlbXBsYXRpbmdCaW5kaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgIH0pKTtcblxuICAgIHRvTG9hZC5wdXNoKFN5c3RlbS5ub3JtYWxpemUoJ2F1cmVsaWEtdGVtcGxhdGluZy1yb3V0ZXInLCBiTmFtZSkudGhlbih0ZW1wbGF0aW5nUm91dGVyID0+IHtcbiAgICAgIGF1cmVsaWEudXNlLnJvdXRlciA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGF1cmVsaWEudXNlLnBsdWdpbih0ZW1wbGF0aW5nUm91dGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICAgIH0pKTtcblxuICAgIHRvTG9hZC5wdXNoKFN5c3RlbS5ub3JtYWxpemUoJ2F1cmVsaWEtaGlzdG9yeS1icm93c2VyJywgYk5hbWUpLnRoZW4oaGlzdG9yeUJyb3dzZXIgPT4ge1xuICAgICAgYXVyZWxpYS51c2UuaGlzdG9yeSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGF1cmVsaWEudXNlLnBsdWdpbihoaXN0b3J5QnJvd3Nlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfTtcbiAgICB9KSk7XG5cbiAgICB0b0xvYWQucHVzaChTeXN0ZW0ubm9ybWFsaXplKCdhdXJlbGlhLXRlbXBsYXRpbmctcmVzb3VyY2VzJywgYk5hbWUpLnRoZW4obmFtZSA9PiB7XG4gICAgICBTeXN0ZW0ubWFwWydhdXJlbGlhLXRlbXBsYXRpbmctcmVzb3VyY2VzJ10gPSBuYW1lO1xuICAgICAgYXVyZWxpYS51c2UuZGVmYXVsdFJlc291cmNlcyA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGF1cmVsaWEudXNlLnBsdWdpbihuYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgdG9Mb2FkLnB1c2goU3lzdGVtLm5vcm1hbGl6ZSgnYXVyZWxpYS1ldmVudC1hZ2dyZWdhdG9yJywgYk5hbWUpLnRoZW4oZXZlbnRBZ2dyZWdhdG9yID0+IHtcbiAgICAgIFN5c3RlbS5tYXBbJ2F1cmVsaWEtZXZlbnQtYWdncmVnYXRvciddID0gZXZlbnRBZ2dyZWdhdG9yO1xuICAgICAgYXVyZWxpYS51c2UuZXZlbnRBZ2dyZWdhdG9yID0gZnVuY3Rpb24oKXtcbiAgICAgICAgYXVyZWxpYS51c2UucGx1Z2luKGV2ZW50QWdncmVnYXRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfTtcbiAgICB9KSk7XG5cbiAgICBhdXJlbGlhLnVzZS5zdGFuZGFyZENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpe1xuICAgICAgYXVyZWxpYS51c2VcbiAgICAgICAgLmRlZmF1bHRCaW5kaW5nTGFuZ3VhZ2UoKVxuICAgICAgICAuZGVmYXVsdFJlc291cmNlcygpXG4gICAgICAgIC5oaXN0b3J5KClcbiAgICAgICAgLnJvdXRlcigpXG4gICAgICAgIC5ldmVudEFnZ3JlZ2F0b3IoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBhdXJlbGlhLnVzZS5kZXZlbG9wbWVudExvZ2dpbmcgPSBmdW5jdGlvbigpe1xuICAgICAgaWYoIWluc3RhbGxlZERldmVsb3BtZW50TG9nZ2luZyl7XG4gICAgICAgIGluc3RhbGxlZERldmVsb3BtZW50TG9nZ2luZyA9IHRydWU7XG4gICAgICAgIExvZ01hbmFnZXIuYWRkQXBwZW5kZXIobmV3IENvbnNvbGVBcHBlbmRlcigpKTtcbiAgICAgICAgTG9nTWFuYWdlci5zZXRMZXZlbChMb2dNYW5hZ2VyLmxvZ0xldmVsLmRlYnVnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0b0xvYWQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVubmluZ0xvY2FsbHkoKXtcbiAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2h0dHAnICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2h0dHBzJztcbn1cblxuZnVuY3Rpb24gaGFuZGxlQXBwKGFwcEhvc3Qpe1xuICB2YXIgY29uZmlnTW9kdWxlSWQgPSBhcHBIb3N0LmdldEF0dHJpYnV0ZSgnYXVyZWxpYS1hcHAnKSxcbiAgICAgIGF1cmVsaWEsIGxvYWRlcjtcblxuICBpZihjb25maWdNb2R1bGVJZCl7XG4gICAgbG9hZGVyID0gbmV3IHdpbmRvdy5BdXJlbGlhTG9hZGVyKCk7XG5cbiAgICByZXR1cm4gbG9hZGVyLmxvYWRNb2R1bGUoY29uZmlnTW9kdWxlSWQpXG4gICAgICAudGhlbihtID0+IHtcbiAgICAgICAgYXVyZWxpYSA9IG5ldyBBdXJlbGlhKGxvYWRlcik7XG4gICAgICAgIGF1cmVsaWEuaG9zdCA9IGFwcEhvc3Q7XG4gICAgICAgIHJldHVybiBjb25maWd1cmVBdXJlbGlhKGF1cmVsaWEpLnRoZW4oKCkgPT4geyByZXR1cm4gbS5jb25maWd1cmUoYXVyZWxpYSk7IH0pO1xuICAgICAgfSk7XG4gIH1lbHNle1xuICAgIGF1cmVsaWEgPSBuZXcgQXVyZWxpYSgpO1xuICAgIGF1cmVsaWEuaG9zdCA9IGFwcEhvc3Q7XG5cbiAgICByZXR1cm4gY29uZmlndXJlQXVyZWxpYShhdXJlbGlhKS50aGVuKCgpID0+IHtcbiAgICAgIGlmKHJ1bm5pbmdMb2NhbGx5KCkpe1xuICAgICAgICBhdXJlbGlhLnVzZS5kZXZlbG9wbWVudExvZ2dpbmcoKTtcbiAgICAgIH1cblxuICAgICAgYXVyZWxpYS51c2Uuc3RhbmRhcmRDb25maWd1cmF0aW9uKCk7XG5cbiAgICAgIHJldHVybiBhdXJlbGlhLnN0YXJ0KCkudGhlbihhID0+IGEuc2V0Um9vdCgpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBydW4oKSB7XG4gIHJldHVybiByZWFkeSh3aW5kb3cpLnRoZW4oZG9jID0+IHtcbiAgICB2YXIgYXBwSG9zdCA9IGRvYy5xdWVyeVNlbGVjdG9yQWxsKFwiW2F1cmVsaWEtYXBwXVwiKTtcblxuICAgIHJldHVybiBlbnN1cmVMb2FkZXIoKS50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiBwcmVwYXJlUGxhdGZvcm0oKS50aGVuKGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBpLCBpaTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGFwcEhvc3QubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGhhbmRsZUFwcChhcHBIb3N0W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzUmVhZHkgPSB0cnVlO1xuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHJlYWR5UXVldWUubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIHJlYWR5UXVldWVbaV0oKTtcbiAgICAgICAgfVxuICAgICAgICByZWFkeVF1ZXVlID0gW107XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbnJ1bigpO1xuIl19